Skip to content

Pick release notes during beta promotion - #23144

Open
oguzkocer wants to merge 4 commits into
trunkfrom
task/static-release-notes
Open

Pick release notes during beta promotion#23144
oguzkocer wants to merge 4 commits into
trunkfrom
task/static-release-notes

Conversation

@oguzkocer

Copy link
Copy Markdown
Contributor

Description

Part of the Faster Releases effort. Lets a developer choose a release note ("what's new") when promoting a build to the Play Store beta track, alongside picking the build. The note is set on the beta release; a later promotion to production reuses that release, so the same note follows the build.

The notes come from a fixed, translated set (STATIC_RELEASE_NOTE_OPTIONS, one option for now, serious) rather than being written per release. Adding an option is a data change: a <key>.txt source plus a row in the list.

How it works

  • The beta-promotion block step gains a second field, Release notes, populated from STATIC_RELEASE_NOTE_OPTIONS (fastlane/Fastfile).
  • promote_to_beta takes the chosen option as release_notes_option (read from Buildkite meta-data by promote-to-beta.sh), validates it, and static_release_notes attaches the per-locale text to the beta release.
  • download_static_release_notes (fastlane/lanes/localization.rb) pulls the translated options from GlotPress into fastlane/{metadata,jetpack_metadata}/android/<locale>/release_notes_static/<option>.txt.
  • Each option's English source is in WordPress/{metadata,jetpack_metadata}/release_notes_static/<option>.txt; its GlotPress string release_note_static_<option> is registered in generate_playstore_strings.

Translations

Each option is translated once through GlotPress (a stable key, so it doesn't change per release). release_note_static_serious is added to each PlayStoreStrings.po for GlotPress to pick up; en-US is committed. Until a locale is translated, the promotion attaches the en-US note and Play falls back to the default listing language.

The .po entry was added by hand rather than regenerating, which would also churn the per-version release_note key.

Testing instructions

The promote lane is trunk-only and acts on the real Play Store (as a draft), so e2e-test from a throwaway branch with the guard removed.

Set up a test branch:

  1. Branch off this PR (e.g. task/static-release-notes-e2e).
  2. Remove the ensure_promotion_on_trunk! calls in fastlane/lanes/promote.rb and commit.

Run the picker:

  1. Start a Buildkite build on the test branch with env PIPELINE=promote-beta.yml, with a promotable build above the current beta version code.
  • Verify the block step shows both a "Build to promote" and a "Release notes" field.
  1. Unblock the step, choosing a build and the Serious release note.
  • Verify promote_to_beta runs and posts a per-app result to Slack.

Confirm in the Play Console:

  1. Open the Play Console for WordPress, then Jetpack, beta track.
  • Verify a draft release for the chosen version code carries the en-US "what's new" text for both apps.
  • Discard the draft release(s) after verifying.

Adds static "what's new" options (one for now, `serious`) chosen from a
second field in the beta-promotion block step. The picked option's notes are
set on the beta release, and the production promote carries them over.

Changes:
- `STATIC_RELEASE_NOTE_OPTIONS` registry (Fastfile)
- Release-notes select field in the beta picker; `promote_to_beta` takes
  `release_notes_option` (read from Buildkite meta-data by promote-to-beta.sh)
- `static_release_notes` attaches the per-locale notes to the beta release
- `download_static_release_notes` lane pulls the translations from GlotPress
- English source files + seeded en-US metadata

Translations are seeded separately via GlotPress; until then promotions
attach the committed en-US note and Play falls back to the default language.
Adds `release_note_static_serious` to both apps' `PlayStoreStrings.po` so
GlotPress can translate it. Added by hand rather than regenerating the `.po`,
which would also churn the per-version `release_note` key.
@oguzkocer oguzkocer added this to the 27.1 milestone Jul 24, 2026
Lint/RedundantDirGlobSort: drop the redundant sort (Dir.glob is already
sorted). Style/NestedFileDirname: use File.dirname(path, 2).
@wpmobilebot

wpmobilebot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

App Icon📲 You can test the changes from this Pull Request in WordPress Android by scanning the QR code below to install the corresponding build.

App NameWordPress Android
Build TypeDebug
Versionpr23144-767a581
Build Number1498
Application IDorg.wordpress.android.prealpha
Commit767a581
Installation URL69ckmqiarpvag
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

wpmobilebot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

App Icon📲 You can test the changes from this Pull Request in Jetpack Android by scanning the QR code below to install the corresponding build.

App NameJetpack Android
Build TypeDebug
Versionpr23144-767a581
Build Number1498
Application IDcom.jetpack.android.prealpha
Commit767a581
Installation URL7jfe5lsnioc08
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

write_beta_promotion_steps_file exceeded the 30-line limit after the
release-notes field was added; move the fields into beta_promotion_block_fields.
@oguzkocer
oguzkocer marked this pull request as ready for review July 24, 2026 06:06
@oguzkocer
oguzkocer requested a review from a team as a code owner July 24, 2026 06:06
@oguzkocer
oguzkocer requested a review from jkmassel July 24, 2026 06:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants